package br.com.inner.custom;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.apache.commons.lang.StringUtils;

public class Reflex {

public static String getValue(Object o, String campo)throws CustomException{
		
		if ( o == null ){
			System.out.println("o eh nulo");
			throw new CustomException("erro.recuperar.valor");
		}
		
		if (StringUtils.isBlank(campo)){
			throw new CustomException("erro.recuperar.valor");
		}
			
		
		Class cl     = o.getClass();
		//Field[] fields = cl.getDeclaredFields();
		//Field field  = null;
		Method method = null;
		String nmMetodo;
		char primeiraLetra;
		Object valor = null;
		
			primeiraLetra = campo.toUpperCase().charAt(0);
			nmMetodo = "get" + primeiraLetra + campo.substring(1);
			
			
			try {
				//method = cl.getMethod(nmMetodo,cl);
				method = cl.getMethod(nmMetodo,new Class[0]);
			} catch (SecurityException e) {
				throw new CustomException("erro.recuperar.valor");
			} catch (NoSuchMethodException e) {
				throw new CustomException("erro.recuperar.valor");
			}
			 
			
			try {
				//valor = method.invoke(o,cl);
				valor = method.invoke(o,new Object[0]);
			} catch (IllegalArgumentException e) {
				throw new CustomException("erro.recuperar.valor");
				
			} catch (IllegalAccessException e) {
				throw new CustomException("erro.recuperar.valor");
				
			} catch (InvocationTargetException e) {
				throw new CustomException("erro.recuperar.valor");
			}
			
			if ( valor !=null ){
				return valor.toString();
			}
		
		return null;
	}

}
